package file

import (
    "os"
    "bufio"
    "strconv"
    "strings"
)

func ToBytes(filePath string) ([]byte, error) {
    return os.ReadFile(filePath)
}

func ToString(filePath string) (string, error) {
    b, err := os.ReadFile(filePath)
    if err != nil {
        return "", err
    }

    return string(b), nil
}

func ToTrimString(filePath string) (string, error) {
    str, err := ToString(filePath)
    if err != nil {
        return "", err
    }

    return strings.TrimSpace(str), nil
}

func ToUint64(filePath string) (uint64, error) {
    content, err := ToTrimString(filePath)
    if err != nil {
        return 0, err
    }

    var ret uint64
    if ret, err = strconv.ParseUint(content, 10, 64); err != nil {
        return 0, err
    }
    return ret, nil
}

func ToInt64(filePath string) (int64, error) {
    content, err := ToTrimString(filePath)
    if err != nil {
        return 0, err
    }

    var ret int64
    if ret, err = strconv.ParseInt(content, 10, 64); err != nil {
        return 0, err
    }
    return ret, nil
}

func ReadLine(r *bufio.Reader) ([]byte, error) {
    line, isPrefix, err := r.ReadLine()
    for isPrefix && err == nil {
        var bs []byte
        bs, isPrefix, err = r.ReadLine()
        line = append(line, bs...)
    }

    return line, err
}
